package cn.tedu.management.portal.controller;

import cn.tedu.management.portal.ex.*;
import cn.tedu.management.portal.util.R;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice//这个注解不能忘记 统一处理异常
public class GlobalExceptionHandler {
    //SpringMVC框架提供了统一处理异常的机制，它希望各控制器中处理请求的方法都直接将异常
    //抛出即可，然后调用专门的方法进行处理！
    @ExceptionHandler(ServiceException.class)
    public R handlerException(Exception e){
        if (e instanceof InvalidParameterException){
            return R.failure(R.State.ERR_INVALID_PARAMETER,e);
        }else if (e instanceof NotFoundException){
            return R.failure(R.State.ERR_NOT_FOUND,e);
        }else if (e instanceof PhoneDuplicateException){
            return R.failure(R.State.ERR_PHONE_DUPLICATE,e);
        }else if (e instanceof InsertException){
            return R.failure(R.State.ERR_INSERT,e);
        }else if (e instanceof DeleteException){
            return R.failure(R.State.ERR_DELETE,e);
        }else if (e instanceof UpdateException){
            return R.failure(R.State.ERR_UPDATE,e);
        }

        //这个基本不会运行,以防万一
        e.printStackTrace();
        return R.failure(-999,e.getMessage());
    }
}
